use opencv::{ prelude::*, videoio, Result, core::{Mat, Vector}, imgcodecs};
// 推流
pub fn _run() -> Result<()>{
	// 打开摄像机
	let mut cam = videoio::VideoCapture::new(0, videoio::CAP_ANY).unwrap();
	// 判断相机是否打开
	if videoio::VideoCapture::is_opened(&cam).unwrap() {
		eprintln!("摄像机已打开！");
	}
	let mut frame = Mat::default();
    let mut buf = Vector::new();

	loop {
		// 捕获帧
		cam.read(&mut frame).unwrap();		
		// 用 imgcodecs::imencode 函数将捕获的帧编码为 JPEG 图像。编码后的图像数据存储在 buf 向量中
        buf.clear();
        let _ = imgcodecs::imencode(".jpg", &frame, &mut buf, &Vector::new());
		loop {
            // 编码和发送帧：在内层循环中，服务器再次捕获帧，对其进行编码，并将编码后的数据存储在 buf 向量中。
            // 然后，服务器为图像构建一个带有适当内容类型和内容长度标头的 HTTP 响应。图像数据将使用 stream.write_all 函数发送到客户端的数据流中
            cam.read(&mut frame).expect("捕获帧失败");
            buf.clear();
			// 将图像编码存到内存缓冲区中
            let _ = imgcodecs::imencode(".jpg", &frame, &mut buf, &Vector::new());
        }
	}
}